
//配置信息

GroupCurr      = 0 //当前执行到的群偏移量
MaxGroup       = 8 //暂时只有8个群需要服务
GroupNumLength = 3 //群组编号长度为3
NumDict_office = "num_office.txt"
NumDict_home   = "num_home.txt"
ThisDebug      = "home"
UrlSend_1_2_3  = "http://127.0.0.1/vbot_wechat/info.php?"
UrlSend_8      = "http://127.0.0.1/vbot_wechat/8.php?"
GameRootPath   = "c:\test_game"
ThisForCurr    = 0//当前循环到第几次了
ForCurrTimer   = 200//停顿多少秒扫描一次
ThisFind8BMP   = GameRootPath & "\find_home_8.bmp" // 这里如果说公司电脑不一致的话，需要更新为公司电脑的图片


//加载大漠插件

PutAttachment "c:\test_game","*.*"
set ws=createobject("Wscript.Shell")
ws.run "regsvr32 c:\test_game\dm.dll /s"
set ws=nothing
Delay 200
Set dm = CreateObject("dm.dmsoft")
ver = dm.Ver()
If len(ver) = 0 Then
	TracePrint "当前大漠插件加载失败的了~~"
    EndScript
End If
Set dm    = createobject("dm.dmsoft")
base_path = dm.GetBasePath()

//群组查询操作
Function find_group()
	dm_ret = dm.SetPath(base_path)
	//根据工作环境使用不同的识别字典
	Select Case ThisDebug
	Case "office"
		dm_ret = dm.SetDict(0, NumDict_office)
	Case "home"
		dm_ret = dm.SetDict(0, NumDict_home)
	End Select
	//顺序为先判断还要不要查,然后鼠标移动，点击，然后取群组名
	If GroupCurr > MaxGroup Then
		ThisForCurr = ThisForCurr + 1
		TracePrint "本次(" & ThisForCurr & ")执行完毕,休息"& (ForCurrTimer/1000) & "秒,继续重复执行"
		Delay ForCurrTimer
		GroupCurr = 0
		Call find_group()
		Exit Function
	End If
	mx        = 90
	my        = 90 + (GroupCurr * 65)
	GroupCurr = GroupCurr + 1
	MoveTo mx, my
	LeftClick 1
	//进行些许延迟操作
	Delay 100
	//进行分支判断是什么电脑
	Select Case ThisDebug
	Case "office"
		groupNum = dm.Ocr(330, 18, 449, 53, "af6200-af6200|000062-000062|0062af-0062af|00388a-00388a|af6200-af6200", 1.0)
	Case "home"
		groupNum = dm.Ocr(337, 24, 373, 46, "f5af62-f5af62|388ad2-388ad2", 1.0)
	End Select
	If groupNum <> "" And len(groupNum) = GroupNumLength Then
		TracePrint "找到群组编号：" & groupNum
		Call service_post( groupNum ) //如果能查到群组名称,且长度为N位，群编号的话，则继续往下执行
	Else
		Call find_group() //如果没有找到群组名,那么继续查找下一个群
	End If
End Function

//这里为找到群组编号后,进行群组提交服务器信息查询,查询是否有1.2.3状态
Function service_post( groupNum )
	Set objXml = CreateObject("Microsoft.XMLHTTP")
	objXML.Open "Post", UrlSend_1_2_3 & "groupNum=" & groupNum , False
    objXML.send
    If objXML.readyState = 4 then
        urlJson = objXML.ResponseText
        Call service_jsonInput_1_2_3( urlJson , groupNum ) //进行json解析输出操作
    Else
        Call find_group() //当前服务器没有反映,那么还是继续往下执行下一个群
    End If
    objXML.Abort
    Set objXML = Nothing
End Function

//进行服务器json信息解析，并通过返回不同的mode值，来判断当前处于什么内容输出模式
//顺序为：输出文本text，延迟2毫秒，按下回车键;;然后继续向下执行 - status没什么卵用,反正是必须要输出的
//这里服务端最多向前端输出4行信息，我们这里对这些信息进行判断，如果有，则say掉一条后，做一个换行的操作
Function service_jsonInput_1_2_3( urlJson , groupNum )
	If urlJson <> "" Then
		TracePrint urlJson
		Dim JsonContent
		JsonContent = Split(urlJson, "|")
		status = JsonContent(0)
		mode   = JsonContent(1)
		text_1 = JsonContent(2)
		text_2 = JsonContent(3)
		text_3 = JsonContent(4)
		text_4 = JsonContent(5)
		text_5 = JsonContent(6)
		text_6 = JsonContent(7)
		If mode = "1" Or mode = "2" Or mode = "3" Then
			If text_1 <> "" Then
				SayString text_1
			End If
			If text_2 <> "" Then
				Call wechat_keyEnter()
				SayString text_2
			End If
			If text_3 <> "" Then
				Call wechat_keyEnter()
				SayString text_3
			End If
			If text_4 <> "" Then
				Call wechat_keyEnter()
				SayString text_4
			End If
			If text_5 <> "" Then
				Call wechat_keyEnter()
				SayString text_5
			End If
			If text_6 <> "" Then
				Call wechat_keyEnter()
				SayString text_6
			End If
			Delay 20
			KeyPress 13, 1
		End If
	End If
	/***::当执行完信息查询后,执行find_8查找是否有人在申请开房的查询::略微延迟下，再往下执行当前页面上的关键词核实***********/
	Delay 70
	Call find_8( groupNum ) //执行本页的关键词8查询
End Function

//微信换行键盘操作
Function wechat_keyEnter()
	KeyDown "Ctrl", 1
	KeyPress "Enter", 1
	KeyUp "Ctrl", 1
	Delay 5
End Function

//查找关键词8的函数
Function find_8( groupNum )
	Delay 100
	Call Plugin.ColorEx.PrintScreen(0, 0, 500, 1024)
	XY = Plugin.ColorEx.FindPic(0, 0, 500, 1024, ThisFind8BMP , 1, 0)
	If XY = "-1|-1" Then
		TracePrint groupNum & "没有找到关键词8"
		Call find_group() // 没有找到关键词8的情况下，等于本次任务就彻底结束了，继续查找下一个群
	Else
		TracePrint groupNum & "找到关键词8：" & XY
		//解析XY轴，通过XY轴把本次发关键词的用户名截图，为什么不能用取文字，因为会有特殊字符，无法取出，用图片对比不知道行不行
		ZB = InStr(XY, "|")
		//下面这句将字符串转换成数值
		X  = Clng(Left(XY, ZB - 1)) : Y = Clng(Right(XY, Len(XY) - ZB))
		//进行鼠标偏移量计算 - 这里是把鼠标移动到聊天信息区域
		x = X + 30
		y = Y + 15
		//进行关键词区域的删除操作 - 鼠标往下跟右偏移像素，然后鼠标右键进行 - 这里是进行删除操作
		MoveTo x, y
		RightClick 1
		MoveTo (x + 20), (y + 180)
		Delay 80
		LeftClick 1
		Delay 20
		//对关键词删除后，把光标移动到输入框内,不能去点原点，不然会点到不同的群里面去
		MoveTo 400,850
		Delay 30
		LeftClick 1
		//发送至后台进行匹配操作
		Call service_post_8(groupNum,XY)
	End If
End Function

//如果找到关键词8，则再次进行服务器信息关键词8的查询
Function service_post_8( groupNum,XY)
	Set objXml_8 = CreateObject("Microsoft.XMLHTTP")
	objXml_8.Open "Post", UrlSend_8 & "groupNum=" & groupNum & "&xy=" & XY  , False
    objXml_8.send
    If objXML.readyState = 4 then
        urlJson = objXml_8.ResponseText
        If urlJson <> "" Then
        	Call service_jsonInput_8( groupNum , urlJson ) //进行json解析输出操作
        Else
        	Call find_group() //如果关键词8服务返回的是“”，也就是没有找到要输出的，那么继续执行下一个群组扫描
        End If
    Else
        Call find_group() //当前服务器没有反映,那么还是继续往下执行下一个群
    End If
    objXml_8.Abort
    Set objXml_8 = Nothing
End Function

//对关键词8的服务器回执做出响应
Function service_jsonInput_8( groupNum , urlJson )
	TracePrint urlJson
	Dim JsonContent
	JsonContent = Split(urlJson, "|")
	status = JsonContent(0)
	mode   = JsonContent(1)
	text   = JsonContent(2)
	Select Case mode
		Case "8"//当前为开房者申请开房 - 为了安全起见，发送之前，再进行最后一次的群组名称判断，如果当前执行的群组名称与当前窗口名称不对称不允许发送
			//进行分支判断是什么电脑
			Select Case ThisDebug
				Case "office"
					this_groupNum = dm.Ocr(330, 18, 449, 53, "af6200-af6200|000062-000062|0062af-0062af|00388a-00388a|af6200-af6200", 1.0)
				Case "home"
					this_groupNum = dm.Ocr(337, 24, 373, 46, "f5af62-f5af62|388ad2-388ad2", 1.0)
			End Select
			//群组编号不能为空，长度 = N， 还要跟当前抓取8的时候的群组编号对应才能发送
			If this_groupNum <> "" And len(this_groupNum) = GroupNumLength And this_groupNum = groupNum Then
				//在当前光标处插入信息
				SayString text
				//延迟20毫秒
				Delay 20
				KeyPress 13, 1
			End If
	End Select
	/***::当执行完关键词8的处理后，继续执行下一个群组:略微延迟***********/
	Delay 50
	Call find_group() //执行本页的关键词8查询
End Function



//程序入口
Call find_group()